ã€ãã¬ãŒã¿ãã«ããŒãšã¡ã¢ãªããŒã«ã掻çšããŠJavaScriptã®ã¹ããªãŒã åŠçãæé©åããå¹ççãªã¡ã¢ãªç®¡çãšããã©ãŒãã³ã¹åäžãå®çŸããæ¹æ³ãæ¢ããŸãã
JavaScript ã€ãã¬ãŒã¿ãã«ããŒãšã¡ã¢ãªããŒã«ïŒã¹ããªãŒã åŠçã®ã¡ã¢ãªç®¡ç
çŸä»£ã®Webã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠãJavaScriptãã¹ããªãŒãã³ã°ããŒã¿ãå¹ççã«åŠçããèœåã¯éåžžã«éèŠã§ããå€§èŠæš¡ãªããŒã¿ã»ããã®åŠçããªã¢ã«ã¿ã€ã ã®ããŒã¿ãã£ãŒãã®åãæ±ãããããŠè€éãªå€æã®å®è¡ã¯ãã¹ãŠãæé©åãããã¡ã¢ãªç®¡çãšé«æ§èœãªã€ãã¬ãŒã·ã§ã³ãèŠæ±ããŸãããã®èšäºã§ã¯ãJavaScriptã®ã€ãã¬ãŒã¿ãã«ããŒãã¡ã¢ãªããŒã«æŠç¥ãšçµã¿åãããŠæŽ»çšããåªããã¹ããªãŒã åŠçããã©ãŒãã³ã¹ãéæããæ¹æ³ãæãäžããŸãã
JavaScriptã«ãããã¹ããªãŒã åŠçã®çè§£
ã¹ããªãŒã åŠçãšã¯ãããŒã¿ãé æ¬¡æ±ããå©çšå¯èœã«ãªã£ãåèŠçŽ ãåŠçããŠããããšã§ããããã¯ãåŠçåã«ããŒã¿ã»ããå šäœãã¡ã¢ãªã«èªã¿èŸŒãæ¹æ³ãšã¯å¯Ÿç §çã§ãå€§èŠæš¡ãªããŒã¿ã»ããã«ã¯éçŸå®çã§ããJavaScriptã¯ãã¹ããªãŒã åŠçã®ããã«ããã€ãã®ã¡ã«ããºã ãæäŸããŠããŸããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- é å: åºæ¬çã§ãããã¡ã¢ãªã®å¶çŽãšå è¡è©äŸ¡ã®ãããå€§èŠæš¡ãªã¹ããªãŒã ã«ã¯éå¹çã§ãã
- ã€ãã©ãã«ãšã€ãã¬ãŒã¿: ã«ã¹ã¿ã ããŒã¿ãœãŒã¹ãšé å»¶è©äŸ¡ãå¯èœã«ããŸãã
- ãžã§ãã¬ãŒã¿: äžåºŠã«äžã€ã®å€ãçæïŒyieldïŒãã颿°ã§ãã€ãã¬ãŒã¿ãäœæããŸãã
- Streams API: éåæããŒã¿ã¹ããªãŒã ãæ±ãããã®åŒ·åã§æšæºåãããæ¹æ³ãæäŸããŸãïŒç¹ã«Node.jsãæ°ãããã©ãŠã¶ç°å¢ã§é¢é£æ§ãé«ãã§ãïŒã
ãã®èšäºã§ã¯ãäž»ã«ã€ãã©ãã«ãã€ãã¬ãŒã¿ããžã§ãã¬ãŒã¿ãã€ãã¬ãŒã¿ãã«ããŒãšã¡ã¢ãªããŒã«ãšçµã¿åãããŠäœ¿çšããããšã«çŠç¹ãåœãŠãŸãã
ã€ãã¬ãŒã¿ãã«ããŒã®å
ã€ãã¬ãŒã¿ãã«ããŒïŒã€ãã¬ãŒã¿ã¢ããã¿ãšãåŒã°ããããšããããŸãïŒã¯ãã€ãã¬ãŒã¿ãå ¥åãšããŠåãåããæåã倿Žãããæ°ããã€ãã¬ãŒã¿ãè¿ã颿°ã§ããããã«ãããæäœãé£éãããè€éãªããŒã¿å€æãç°¡æœã§èªã¿ãããæ¹æ³ã§äœæã§ããŸããJavaScriptã«ãã€ãã£ãã§çµã¿èŸŒãŸããŠããããã§ã¯ãããŸãããããitertools.jsãã®ãããªã©ã€ãã©ãªïŒäŸãã°ïŒãããããæäŸããŠããŸãããã®æŠå¿µèªäœã¯ããžã§ãã¬ãŒã¿ãšã«ã¹ã¿ã 颿°ã䜿çšããŠé©çšã§ããŸããäžè¬çãªã€ãã¬ãŒã¿ãã«ããŒæäœã®äŸã«ã¯ã次ã®ãããªãã®ããããŸãïŒ
- map: ã€ãã¬ãŒã¿ã®åèŠçŽ ã倿ããŸãã
- filter: æ¡ä»¶ã«åºã¥ããŠèŠçŽ ãéžæããŸãã
- take: éãããæ°ã®èŠçŽ ãè¿ããŸãã
- drop: ç¹å®ã®æ°ã®èŠçŽ ãã¹ãããããŸãã
- reduce: å€ãåäžã®çµæã«éçŽããŸãã
äŸãæããŠèª¬æããŸããããæ°å€ã®ã¹ããªãŒã ãçæãããžã§ãã¬ãŒã¿ããããå¶æ°ããã£ã«ã¿ãªã³ã°ããæ®ãã®å¥æ°ãäºä¹ããããšããŸãã
äŸïŒãžã§ãã¬ãŒã¿ã«ãããã£ã«ã¿ãªã³ã°ãšãããã³ã°
function* numberGenerator(limit) {
for (let i = 0; i < limit; i++) {
yield i;
}
}
function* filterOdd(iterator) {
for (const value of iterator) {
if (value % 2 !== 0) {
yield value;
}
}
}
function* square(iterator) {
for (const value of iterator) {
yield value * value;
}
}
const numbers = numberGenerator(10);
const oddNumbers = filterOdd(numbers);
const squaredOddNumbers = square(oddNumbers);
for (const value of squaredOddNumbers) {
console.log(value); // åºå: 1, 9, 25, 49, 81
}
ãã®äŸã¯ãã€ãã¬ãŒã¿ãã«ããŒïŒããã§ã¯ãžã§ãã¬ãŒã¿é¢æ°ãšããŠå®è£ ïŒãé£éãããŠãé å»¶è©äŸ¡ãã€å¹ççãªæ¹æ³ã§è€éãªããŒã¿å€æãå®è¡ããæ¹æ³ã瀺ããŠããŸãããããããã®ã¢ãããŒãã¯æ©èœçã§èªã¿ãããäžæ¹ã§ãç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããèšç®è² è·ã®é«ãå€æãæ±ãéã«ã¯ãé »ç¹ãªãªããžã§ã¯ãã®äœæãšã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãåŒãèµ·ããå¯èœæ§ããããŸãã
ã¹ããªãŒã åŠçã«ãããã¡ã¢ãªç®¡çã®èª²é¡
JavaScriptã®ã¬ããŒãžã³ã¬ã¯ã¿ã¯ã䜿çšãããªããªã£ãã¡ã¢ãªãèªåçã«è§£æŸããŸããããã¯äŸ¿å©ã§ãããé »ç¹ãªã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãµã€ã¯ã«ã¯ãç¹ã«ãªã¢ã«ã¿ã€ã ãŸãã¯ã»ãŒãªã¢ã«ã¿ã€ã ã®åŠçãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã«ãããŠãããã©ãŒãã³ã¹ã«æªåœ±é¿ãäžããå¯èœæ§ããããŸããããŒã¿ãç¶ç¶çã«æµããã¹ããªãŒã åŠçã§ã¯ãäžæçãªãªããžã§ã¯ããé »ç¹ã«äœæããã³ç Žæ£ãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãªãŒããŒããããå¢å ããŸãã
ã»ã³ãµãŒããŒã¿ã衚ãJSONãªããžã§ã¯ãã®ã¹ããªãŒã ãåŠçããã·ããªãªãèããŠã¿ãŸããããå倿ã¹ãããïŒäŸïŒç¡å¹ãªããŒã¿ã®ãã£ã«ã¿ãªã³ã°ãå¹³åå€ã®èšç®ãåäœã®å€æïŒã§æ°ããJavaScriptãªããžã§ã¯ããäœæãããå¯èœæ§ããããŸããæéãçµã€ã«ã€ããŠãããã¯å€§éã®ã¡ã¢ãªãã£ãŒã³ãšããã©ãŒãã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸãã
äž»ãªåé¡ç¹ã¯ä»¥äžã®éãã§ãïŒ
- äžæãªããžã§ã¯ãã®äœæ: åã€ãã¬ãŒã¿ãã«ããŒæäœã¯ããã°ãã°æ°ãããªããžã§ã¯ããäœæããŸãã
- ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãªãŒããŒããã: é »ç¹ãªãªããžã§ã¯ãäœæã¯ãããé »ç¹ãªã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãµã€ã¯ã«ã«ã€ãªãããŸãã
- ããã©ãŒãã³ã¹ã®ããã«ããã¯: ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«ããäžæåæ¢ã¯ãããŒã¿ã®æµãã劚ããå¿çæ§ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
ã¡ã¢ãªããŒã«ãã¿ãŒã³ã®å°å ¥
ã¡ã¢ãªããŒã«ã¯ããªããžã§ã¯ããæ ŒçŽãåå©çšããããã«äºåã«å²ãåœãŠãããã¡ã¢ãªãããã¯ã§ããæ¯åæ°ãããªããžã§ã¯ããäœæãã代ããã«ãããŒã«ãããªããžã§ã¯ããååŸãã䜿çšåŸã«ããŒã«ã«æ»ããŠåŸã§åå©çšããŸããããã«ããããªããžã§ã¯ãäœæãšã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãªãŒããŒããããå€§å¹ ã«åæžãããŸãã
äžå¿çãªã¢ã€ãã¢ã¯ãåå©çšå¯èœãªãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ãç¶æããã¬ããŒãžã³ã¬ã¯ã¿ãåžžã«ã¡ã¢ãªãå²ãåœãŠããè§£æŸãããããå¿ èŠæ§ãæå°éã«æããããšã§ããã¡ã¢ãªããŒã«ãã¿ãŒã³ã¯ãã¹ããªãŒã åŠçã®ããã«ãªããžã§ã¯ããé »ç¹ã«äœæããã³ç Žæ£ãããã·ããªãªã§ç¹ã«å¹æçã§ãã
ã¡ã¢ãªããŒã«ã䜿çšããå©ç¹
- ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®åæž: ãªããžã§ã¯ãäœæãå°ãªããªãããšã§ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãµã€ã¯ã«ãæžå°ããŸãã
- ããã©ãŒãã³ã¹ã®åäž: ãªããžã§ã¯ãã®åå©çšã¯ãæ°ãããªããžã§ã¯ããäœæãããããé«éã§ãã
- äºæž¬å¯èœãªã¡ã¢ãªäœ¿çšé: ã¡ã¢ãªããŒã«ã¯äºåã«ã¡ã¢ãªãå²ãåœãŠããããããäºæž¬å¯èœãªã¡ã¢ãªäœ¿çšãã¿ãŒã³ãæäŸããŸãã
JavaScriptã§ã®ã¡ã¢ãªããŒã«å®è£
以äžã¯ãJavaScriptã§ã¡ã¢ãªããŒã«ãå®è£ ããæ¹æ³ã®åºæ¬çãªäŸã§ãïŒ
class MemoryPool {
constructor(size, objectFactory) {
this.size = size;
this.objectFactory = objectFactory;
this.pool = [];
this.index = 0;
// ãªããžã§ã¯ããäºåå²ãåœãŠ
for (let i = 0; i < size; i++) {
this.pool.push(objectFactory());
}
}
acquire() {
if (this.index < this.size) {
return this.pool[this.index++];
} else {
// ãªãã·ã§ã³ã§ããŒã«ãæ¡åŒµããããnullãè¿ã/ãšã©ãŒãã¹ããŒãã
console.warn("ã¡ã¢ãªããŒã«ãæ¯æžããŸããããµã€ãºã®å¢å ãæ€èšããŠãã ããã");
return this.objectFactory(); // ããŒã«ãæ¯æžããå Žåãæ°ãããªããžã§ã¯ããäœæïŒå¹çã¯äœãïŒ
}
}
release(object) {
// ãªããžã§ã¯ããã¯ãªãŒã³ãªç¶æ
ã«ãªã»ããïŒéèŠïŒïŒ- ãªããžã§ã¯ãã®åã«äŸå
for (const key in object) {
if (object.hasOwnProperty(key)) {
object[key] = null; // ãŸãã¯åã«é©ããããã©ã«ãå€
}
}
this.index--;
if (this.index < 0) this.index = 0; // ã€ã³ããã¯ã¹ã0æªæºã«ãªãã®ãé²ã
this.pool[this.index] = object; // ãªããžã§ã¯ããçŸåšã®ã€ã³ããã¯ã¹ã§ããŒã«ã«æ»ã
}
}
// 䜿çšäŸïŒ
// ãªããžã§ã¯ããäœæãããã¡ã¯ããªé¢æ°
function createPoint() {
return { x: 0, y: 0 };
}
const pointPool = new MemoryPool(100, createPoint);
// ããŒã«ãããªããžã§ã¯ããååŸ
const point1 = pointPool.acquire();
point1.x = 10;
point1.y = 20;
console.log(point1);
// ãªããžã§ã¯ããããŒã«ã«æ»ã
pointPool.release(point1);
// å¥ã®ãªããžã§ã¯ããååŸïŒåã®ãã®ãåå©çšããå¯èœæ§ããïŒ
const point2 = pointPool.acquire();
console.log(point2);
éèŠãªèæ ®äºé :
- ãªããžã§ã¯ãã®ãªã»ãã: `release`ã¡ãœããã¯ã以åã®äœ¿çšããããŒã¿ãæã¡è¶ãããã®ãé¿ããããã«ããªããžã§ã¯ããã¯ãªãŒã³ãªç¶æ ã«ãªã»ããããå¿ èŠããããŸããããã¯ããŒã¿ã®æŽåæ§ã«ãšã£ãŠéåžžã«éèŠã§ããç¹å®ã®ãªã»ããããžãã¯ã¯ãããŒã«ãããŠãããªããžã§ã¯ãã®ã¿ã€ãã«äŸåããŸããäŸãã°ãæ°å€ã¯0ã«ãæååã¯ç©ºæååã«ããªããžã§ã¯ãã¯åæã®ããã©ã«ãç¶æ ã«ãªã»ããããããããããŸããã
- ããŒã«ãµã€ãº: é©åãªããŒã«ãµã€ãºãéžæããããšãéèŠã§ããããŒã«ãå°ãããããšé »ç¹ã«æ¯æžãã倧ãããããšã¡ã¢ãªã浪費ããŸããæé©ãªãµã€ãºã決å®ããã«ã¯ãã¹ããªãŒã åŠçã®ããŒãºãåæããå¿ èŠããããŸãã
- ããŒã«æ¯æžæã®æŠç¥: ããŒã«ãæ¯æžããå Žåã«ã©ããããïŒäžèšã®äŸã§ã¯ãããŒã«ã空ã®å Žåã«æ°ãããªããžã§ã¯ããäœæããŸãïŒå¹çã¯äœãïŒãä»ã®æŠç¥ã«ã¯ããšã©ãŒãã¹ããŒããããããŒã«ãåçã«æ¡åŒµãããããæ¹æ³ããããŸãã
- ã¹ã¬ããã»ãŒããã£: ãã«ãã¹ã¬ããç°å¢ïŒäŸïŒWeb Workerã䜿çšïŒã§ã¯ãç«¶åç¶æ ãé¿ããããã«ã¡ã¢ãªããŒã«ãã¹ã¬ããã»ãŒãã§ããããšã確èªããå¿ èŠããããŸããããã«ã¯ãããã¯ãä»ã®åæã¡ã«ããºã ã®äœ¿çšãå«ãŸããå ŽåããããŸããããã¯ããé«åºŠãªãããã¯ã§ãããäžè¬çãªWebã¢ããªã±ãŒã·ã§ã³ã§ã¯éåžžå¿ èŠãããŸããã
ã¡ã¢ãªããŒã«ãšã€ãã¬ãŒã¿ãã«ããŒã®çµ±å
ããã§ã¯ãã¡ã¢ãªããŒã«ãã€ãã¬ãŒã¿ãã«ããŒãšçµ±åããŸããããåã®äŸã倿ŽããŠããã£ã«ã¿ãªã³ã°ããã³ãããã³ã°æäœäžã«äžæãªããžã§ã¯ããäœæããããã«ã¡ã¢ãªããŒã«ã䜿çšããŸãã
function* numberGenerator(limit) {
for (let i = 0; i < limit; i++) {
yield i;
}
}
//ã¡ã¢ãªããŒã«
class MemoryPool {
constructor(size, objectFactory) {
this.size = size;
this.objectFactory = objectFactory;
this.pool = [];
this.index = 0;
// ãªããžã§ã¯ããäºåå²ãåœãŠ
for (let i = 0; i < size; i++) {
this.pool.push(objectFactory());
}
}
acquire() {
if (this.index < this.size) {
return this.pool[this.index++];
} else {
// ãªãã·ã§ã³ã§ããŒã«ãæ¡åŒµããããnullãè¿ã/ãšã©ãŒãã¹ããŒãã
console.warn("ã¡ã¢ãªããŒã«ãæ¯æžããŸããããµã€ãºã®å¢å ãæ€èšããŠãã ããã");
return this.objectFactory(); // ããŒã«ãæ¯æžããå Žåãæ°ãããªããžã§ã¯ããäœæïŒå¹çã¯äœãïŒ
}
}
release(object) {
// ãªããžã§ã¯ããã¯ãªãŒã³ãªç¶æ
ã«ãªã»ããïŒéèŠïŒïŒ- ãªããžã§ã¯ãã®åã«äŸå
for (const key in object) {
if (object.hasOwnProperty(key)) {
object[key] = null; // ãŸãã¯åã«é©ããããã©ã«ãå€
}
}
this.index--;
if (this.index < 0) this.index = 0; // ã€ã³ããã¯ã¹ã0æªæºã«ãªãã®ãé²ã
this.pool[this.index] = object; // ãªããžã§ã¯ããçŸåšã®ã€ã³ããã¯ã¹ã§ããŒã«ã«æ»ã
}
}
function createNumberWrapper() {
return { value: 0 };
}
const numberWrapperPool = new MemoryPool(100, createNumberWrapper);
function* filterOddWithPool(iterator, pool) {
for (const value of iterator) {
if (value % 2 !== 0) {
const wrapper = pool.acquire();
wrapper.value = value;
yield wrapper;
}
}
}
function* squareWithPool(iterator, pool) {
for (const wrapper of iterator) {
const squaredWrapper = pool.acquire();
squaredWrapper.value = wrapper.value * wrapper.value;
pool.release(wrapper); // ã©ãããŒãããŒã«ã«æ»ã
yield squaredWrapper;
}
}
const numbers = numberGenerator(10);
const oddNumbers = filterOddWithPool(numbers, numberWrapperPool);
const squaredOddNumbers = squareWithPool(oddNumbers, numberWrapperPool);
for (const wrapper of squaredOddNumbers) {
console.log(wrapper.value); // åºå: 1, 9, 25, 49, 81
numberWrapperPool.release(wrapper);
}
äž»ãªå€æŽç¹:
- æ°å€ã©ãããŒçšã®ã¡ã¢ãªããŒã«: åŠçãããæ°å€ãã©ãããããªããžã§ã¯ãã管çããããã«ã¡ã¢ãªããŒã«ãäœæãããŸããããã¯ããã£ã«ã¿ãªã³ã°ããã³äºä¹æäœäžã«æ°ãããªããžã§ã¯ããäœæããã®ãé¿ããããã§ãã
- ååŸãšè§£æŸ: `filterOddWithPool`ãš`squareWithPool`ãžã§ãã¬ãŒã¿ã¯ãå€ãå²ãåœãŠãåã«ããŒã«ãããªããžã§ã¯ããååŸããäžèŠã«ãªã£ããããŒã«ã«è§£æŸããããã«ãªããŸããã
- æç€ºçãªãªããžã§ã¯ããªã»ãã: MemoryPoolã¯ã©ã¹ã®`release`ã¡ãœããã¯äžå¯æ¬ ã§ãããªããžã§ã¯ãã®`value`ããããã£ã`null`ã«ãªã»ããããŠãåå©çšã®ããã«ã¯ãªãŒã³ã§ããããšãä¿èšŒããŸãããã®ã¹ããããçç¥ãããšãåŸç¶ã®ã€ãã¬ãŒã·ã§ã³ã§äºæããªãå€ã衚瀺ãããå¯èœæ§ããããŸãããã®ç¹å®ã®äŸã§ã¯ãååŸãããªããžã§ã¯ãã¯æ¬¡ã®ååŸ/䜿çšãµã€ã¯ã«ã§å³åº§ã«äžæžãããããããå³å¯ã«ã¯*å¿ é *ã§ã¯ãããŸãããããããè€æ°ã®ããããã£ããã¹ããããæ§é ãæã€ããè€éãªãªããžã§ã¯ãã®å Žåãé©åãªãªã»ããã¯çµ¶å¯Ÿã«éèŠã§ãã
ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé ãšãã¬ãŒããªã
ã¡ã¢ãªããŒã«ãã¿ãŒã³ã¯å€ãã®ã·ããªãªã§ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããããã¬ãŒããªããèæ ®ããããšãéèŠã§ãïŒ
- è€éã: ã¡ã¢ãªããŒã«ãå®è£ ãããšãã³ãŒããè€éã«ãªããŸãã
- ã¡ã¢ãªãªãŒããŒããã: ã¡ã¢ãªããŒã«ã¯äºåã«ã¡ã¢ãªãå²ãåœãŠããããããŒã«ãå®å šã«äœ¿çšãããªãå Žåã¯ã¡ã¢ãªãç¡é§ã«ãªãå¯èœæ§ããããŸãã
- ãªããžã§ã¯ããªã»ããã®ãªãŒããŒããã: `release`ã¡ãœããã§ãªããžã§ã¯ãããªã»ãããããšãå€å°ã®ãªãŒããŒããããå ãããŸãããéåžžã¯æ°ãããªããžã§ã¯ããäœæãããããã¯ããã«å°ãªãã§ãã
- ãããã°: ã¡ã¢ãªããŒã«é¢é£ã®åé¡ã¯ãç¹ã«ãªããžã§ã¯ããé©åã«ãªã»ãããŸãã¯è§£æŸãããªãå Žåããããã°ãé£ããããšããããŸãã
ã¡ã¢ãªããŒã«ã䜿çšãã¹ãå Žå:
- é«é »åºŠã®ãªããžã§ã¯ãäœæãšç Žæ£ãè¡ãããå Žåã
- å€§èŠæš¡ãªããŒã¿ã»ããã®ã¹ããªãŒã åŠçã
- äœé å»¶ã§äºæž¬å¯èœãªããã©ãŒãã³ã¹ãèŠæ±ãããã¢ããªã±ãŒã·ã§ã³ã
- ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«ããäžæåæ¢ã蚱容ã§ããªãã·ããªãªã
ã¡ã¢ãªããŒã«ãé¿ããã¹ãå Žå:
- ãªããžã§ã¯ãäœæãæå°éã®ã·ã³ãã«ãªã¢ããªã±ãŒã·ã§ã³ã
- ã¡ã¢ãªäœ¿çšéãåé¡ã«ãªããªãç¶æ³ã
- 远å ãããè€éããããã©ãŒãã³ã¹äžã®å©ç¹ãäžåãå Žåã
代æ¿ã¢ãããŒããšæé©å
ã¡ã¢ãªããŒã«ã®ä»ã«ãJavaScriptã®ã¹ããªãŒã åŠçããã©ãŒãã³ã¹ãåäžãããããã®ä»ã®ãã¯ããã¯ããããŸãïŒ
- ãªããžã§ã¯ãã®åå©çš: æ°ãããªããžã§ã¯ããäœæãã代ããã«ãå¯èœãªéãæ¢åã®ãªããžã§ã¯ããåå©çšããŠã¿ãŠãã ãããããã«ãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãªãŒããŒããããåæžãããŸããããã¯ãŸãã«ã¡ã¢ãªããŒã«ãéæããããšã§ãããç¹å®ã®ç¶æ³ã§ã¯æåã§ãã®æŠç¥ãé©çšããããšãã§ããŸãã
- ããŒã¿æ§é : ããŒã¿ã«é©ããããŒã¿æ§é ãéžæããŠãã ãããäŸãã°ãæ°å€ããŒã¿ã«ã¯éåžžã®JavaScripté åãããTypedArrayã䜿çšããæ¹ãå¹ççã§ããTypedArrayã¯ãJavaScriptã®ãªããžã§ã¯ãã¢ãã«ã®ãªãŒããŒãããããã€ãã¹ããŠãçã®ãã€ããªããŒã¿ãæ±ãæ¹æ³ãæäŸããŸãã
- Web Worker: èšç®è² è·ã®é«ãã¿ã¹ã¯ãWeb Workerã«ãªãããŒãããŠãã¡ã€ã³ã¹ã¬ããããããã¯ããªãããã«ããŸããWeb Workerã䜿çšãããšãããã¯ã°ã©ãŠã³ãã§JavaScriptã³ãŒããå®è¡ã§ããã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãåäžããŸãã
- Streams API: éåæããŒã¿åŠçã«ã¯Streams APIãæŽ»çšããŠãã ãããStreams APIã¯ãéåæããŒã¿ã¹ããªãŒã ãæ±ãããã®æšæºåãããæ¹æ³ãæäŸããå¹ççã§æè»ãªããŒã¿åŠçãå¯èœã«ããŸãã
- ã€ãã¥ãŒã¿ãã«ãªããŒã¿æ§é : ã€ãã¥ãŒã¿ãã«ãªããŒã¿æ§é ã¯ãæå³ããªã倿Žãé²ããæ§é ã®å ±æãå¯èœã«ããããšã§ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸããImmutable.jsã®ãããªã©ã€ãã©ãªã¯ãJavaScriptçšã®ã€ãã¥ãŒã¿ãã«ãªããŒã¿æ§é ãæäŸããŸãã
- ãããåŠç: ããŒã¿ãäžåºŠã«1èŠçŽ ãã€åŠçããã®ã§ã¯ãªãããããã§åŠçããããšã§ã颿°åŒã³åºãããã®ä»ã®æäœã®ãªãŒããŒããããåæžããŸãã
ã°ããŒãã«ã³ã³ããã¹ããšåœéåã«é¢ããèæ ®äºé
ã°ããŒãã«ãªèŠèŽè ã察象ãšããã¹ããªãŒã åŠçã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããéã«ã¯ã以äžã®åœéåïŒi18nïŒããã³ããŒã«ãªãŒãŒã·ã§ã³ïŒl10nïŒã®åŽé¢ãèæ ®ããŠãã ããïŒ
- ããŒã¿ãšã³ã³ãŒãã£ã³ã°: ããŒã¿ãããµããŒãããå¿ èŠã®ãããã¹ãŠã®èšèªããµããŒãããæåãšã³ã³ãŒãã£ã³ã°ïŒUTF-8ãªã©ïŒã§ãšã³ã³ãŒããããŠããããšã確èªããŠãã ããã
- æ°å€ãšæ¥ä»ã®ãã©ãŒããã: ãŠãŒã¶ãŒã®ãã±ãŒã«ã«åºã¥ããŠé©åãªæ°å€ãšæ¥ä»ã®ãã©ãŒãããã䜿çšããŠãã ãããJavaScriptã¯ããã±ãŒã«åºæã®èŠåã«åŸã£ãŠæ°å€ãšæ¥ä»ããã©ãŒãããããããã®APIãæäŸããŠããŸãïŒäŸïŒ`Intl.NumberFormat`ã`Intl.DateTimeFormat`ïŒã
- é貚ã®åãæ±ã: ãŠãŒã¶ãŒã®å Žæã«åºã¥ããŠéè²šãæ£ããåŠçããŠãã ãããæ£ç¢ºãªé貚æç®ãšãã©ãŒããããæäŸããã©ã€ãã©ãªãAPIã䜿çšããŠãã ããã
- ããã¹ãã®æ¹å: å·Šããå³ïŒLTRïŒãšå³ããå·ŠïŒRTLïŒã®äž¡æ¹ã®ããã¹ãæ¹åããµããŒãããŠãã ãããCSSã䜿çšããŠããã¹ãã®æ¹åãåŠçããã¢ã©ãã¢èªãããã©ã€èªã®ãããªRTLèšèªã§UIãé©åã«ãã©ãŒãªã³ã°ãããããã«ããŠãã ããã
- ã¿ã€ã ãŸãŒã³: æéã«ææãªããŒã¿ãåŠçããã³è¡šç€ºããéã«ã¯ãã¿ã€ã ãŸãŒã³ã«æ³šæããŠãã ãããMoment.jsãLuxonã®ãããªã©ã€ãã©ãªã䜿çšããŠãã¿ã€ã ãŸãŒã³ã®å€æãšãã©ãŒããããåŠçããŠãã ããããã ãããã®ãããªã©ã€ãã©ãªã®ãµã€ãºã«ã¯æ³šæããŠãã ãããããŒãºã«ãã£ãŠã¯ãããå°ããªä»£æ¿ææ®µãé©ããŠããå ŽåããããŸãã
- æåçæåæ§: æåçãªä»®å®ãããããç°ãªãæåã®ãŠãŒã¶ãŒã«ãšã£ãŠäžå¿«ã«æãããå¯èœæ§ã®ããèšèã䜿çšãããããªãã§ãã ãããã³ã³ãã³ããæåçã«é©åã§ããããšã確èªããããã«ãããŒã«ãªãŒãŒã·ã§ã³ã®å°éå®¶ãšçžè«ããŠãã ããã
äŸãã°ãeã³ããŒã¹ã®ååŒã¹ããªãŒã ãåŠçããŠããå ŽåããŠãŒã¶ãŒã®å Žæã«åºã¥ããŠç°ãªãéè²šãæ°å€åœ¢åŒãæ¥ä»åœ¢åŒãåŠçããå¿ èŠããããŸããåæ§ã«ããœãŒã·ã£ã«ã¡ãã£ã¢ã®ããŒã¿ãåŠçããŠããå Žåã¯ãç°ãªãèšèªãããã¹ãã®æ¹åããµããŒãããå¿ èŠããããŸãã
çµè«
JavaScriptã®ã€ãã¬ãŒã¿ãã«ããŒã¯ãã¡ã¢ãªããŒã«æŠç¥ãšçµã¿åãããããšã§ãã¹ããªãŒã åŠçã®ããã©ãŒãã³ã¹ãæé©åãã匷åãªæ¹æ³ãæäŸããŸãããªããžã§ã¯ããåå©çšããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãªãŒããŒããããåæžããããšã§ãããå¹ççã§å¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãããã ãããã¬ãŒããªããæ éã«èæ ®ããç¹å®ã®ããŒãºã«åºã¥ããŠæ£ããã¢ãããŒããéžæããããšãéèŠã§ãããŸããã°ããŒãã«ãªèŠèŽè åãã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããéã«ã¯ãåœéåã®åŽé¢ãèæ ®ããããšãå¿ããªãã§ãã ããã
ã¹ããªãŒã åŠçãã¡ã¢ãªç®¡çãããã³åœéåã®ååãçè§£ããããšã§ã髿§èœã§ã°ããŒãã«ã«ã¢ã¯ã»ã¹å¯èœãªJavaScriptã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã